Seminario Perl 1/2014 (Diego Santos, Andre Aciolly)
Grupo: : Diego Santos da Silva - 110027892 : André Accioly Lima - 120059908 Introdução e Histórico : Perl é uma linguagem interpretada de alto nivel e de uso geral. : Foi desenvolvida por Lary Wall em 1987. Wall foi encarregado de desenvolver um sistema de controle e administração de uma rede de computadores Unix, com capacidade de gerar relatórios. Insatisfeito com as limitações das ferramentas disponíveis, desenvolveu a primeira versão de Perl como uma maneira de integrar diferentes ferramentas. Essa primeira versão de Perl tinha como objetivo converter tipos de dados utilizados por diferentes ferrramentas. : A primeira versão de perl foi basead em awk e sed. ''Akw é uma linguagem com amplos recursos para manipulação de strings e expressões regulares, o que facilitaria a produção de relatórios. Sed é uma ferramenta de edição e filtragem de streams. Por fim a sintaxe para a linguagem foi baseada em C, Pascal, Basic e Shell. : Foi extensivamente utilizada em desenvolvimento web durante a decada de 90. No entanto vem perdendo espaço para outras linguagens como Java, Python, Ruby e C#. Paradigmas de Projeto: Premissas: : "''Threres more than one way to do anything." : "Easy should be easy and dificult should be possible." : Estes são os dois lemas principais de perl e sumarizam boa parte de suas premissas. Perl foi pensado para ser de fácil aprendizagem, tendo o programador em foco. Assim a sintaxe em Perl é pensada para ser mais próxima da linguagem natural. O foco é facilitar a escrita por parte do programador e não a eficiência de leitura por parte do computador. : O foco no programador também auxilia na flexibilidade. Tomando como base os processos de comunicação natural onde existem diversas maneiras de explicar um mesmo fato, e que este fato pode depender de um contexto, Perl possibilita ampla diversidade de soluções para um mesmo problema. A linguagem em si não julga o desempenho isolado de cada implementação. O princípio de Perl é que se o problema proposto foi resolvido, então o código é bom. : A facilidade de aprendizagem e a ampla liberdade de opções dada ao programador gera alguns problemas. A manutenção e leitura de código em Pearl torna-se trabalhosa, pois na medida que diversas soluções são possiveis, a implementação da solução pode se tornar muito específica ao modo como o programador pensa, sendo dificultada a leitura de programas de outras pessoas. Perl dá muita liberdade de criação para que o programador siga sua própria lógica. Este fato, somado a facilidade de aprendizado da linguagem fez com que surgisse o preconceito de que todo código em Perl é sujo. : A afirmação anterior é falsa, pois é possível implementar códigos eficientes em Perl, mas é reponsabilidade do programador decidir o foco da sua implementação e otimizar seu código de maneira adequada. : Devido a história de seu desenvolvimento, Perl mantem até hoje um ótimo tratamento de arquivos texto e condições de portabilidade. Usuário Caracteristico: : A partir de sua proposta, Perl foi desenvolvida para ser utilizada por qualquer um. Construtores e Declarações: Em Perl, como não ocorre chegagem de tipo na declaração de variáveis, não é preciso declarar tipos de variáveis. Assim, para declarar variáveis, o comando'' my é'' ''utilizado. 'my $exemplo - A declaração de variáveis escalares é feita com o operador $''' my @exemplo'' - A declaração de vetores é feita através do operador @''' my %exemplo - A declaração de hash ''é feita pelo operador %. ' Uma hash é uma relação de chave (string) para escalares. : As variáveis tem escopo o bloco onde foram declaradas, ou seja, é possível criar variáveis com o mesmo nome, mas em blocoas diferentes. Se uma variável for declarada fora de blocos, se tivermos uma variável dentro de um bloco com o mesmo nome, o processamento da variável interna do bloco tem prioridade, ilustrada nos exemplos a seguir: '''} ' my $email = 'foo@bar.com'' ' print "$email\n";' }''' : Nesse caso, o print não funciona, pois $email é destruído quando o bloco termina. '''my $name = "Foo"; print "$name \n"; {' ' print "name \n"; ' $name = "Other";' ' print "$name \n";' }''' '''print "$name \n"; : Nesse caso, o print dentro do bloco imprime o $fname que foi feclarado dentro do bloco, ou seja, o $fname dentro do bloco "esconde" o valor do $fname declarado do lado de fora do bloco. : Perl tem por uma grande característica a manipulação de textos e arquivos, e isso se dá pelo seu suporte a expressões regulares, mas sobre isso será falado mais abaixo. Para a manipulação de arquivos, dentro diversos comandos, os principais são: $arquivo = '/etc/password'; open(INFO, $arquivo); @linhas = ; close(INFO); print @linhas; : O comando $arquivo = 'etc/password' faz com que uma variável receba um ponteiro para o arquivo; o comando open(INFO, $arquivo) carrega o conteúdo do arquivo em INFO (INFO é chamado de filehandle '' e a forma como Perl manipula o filehandle é o grande diferencial); a linha @linhas = carrega todas as linhas do arquivo em @linhas; close(INFO) fecha o arquivo. Para ilustrar como ocorre a manipulação de filehandle, temos o seguinte: '''print INFO "Esta linha sera gravada no arquivo \n";' : Essa linha grava o conteudo entre aspas no arquivo em INFO. : Outra característica de Perl é chamado de Interpolação de Variáveis, onde ocorre a inserção de variáveis diretamente no conteúdo de strings. É feita da seguinte forma: my $name = 'professor'; my $tme = "hoje"; print "Ola $name, como voce esta $time? \n"; : Aqui, temos o conteúdo de $name e $time inseridos na string. Então teremos a seguinte saída: "Ola professor, como voce esta hoje?". Em caso de strings curtas, não faz diferença o uso de aspas duplas ou aspas simples, mas no geral, a declaração de variáveis para o uso de interpolação deve ser feita com aspas duplas. : Expressões regulares (também chamadas de Regex) são formas concisas e flexíveis de identificar uma cadeia de caracteres de interesse em um determinado texto, string ou arquivo. Auxiliam também o acesso e identificação de endereços de páginas da web, o que auxilia o suporte de desenvolvimento web para Perl. A comparação de regex em Perl é feita com o uso do operador =~ e a expressão fica entre barras: $sentenca =~ /ola/; -> retorna true se ola estiver em sentença. '''$sentenca != /ola/; -> ret'orna''' t'rue se ola nao estiver na sentença.' : E existem inúmeras maneiras de utilizar regex. Mas aqui, serão citados somente alguns exemplos e operadores para manipular expressões regulares: :: . -> indica qualquer caractere, com exceção do "newline (\n)". Ex:/t.a/ -> ira reconhecer ''tia, transporte...'' :: ^ -> início da linha (ou da string). Ex: /^f/ -> reconhece "f" no inico de linha. :: $ -> final da linha (ou string). Ex: /e$/, /tre$/ -> reconhece "e" ou "tre" no fim de linha :: * -> zero ou mais vezes o caractere precedente (). Ex: /cas*/, /.*/ -> "ca" seguido de zero ou mais caracteres "s", qualquer string sem newline. :: + -> uma ou mais vezes o caractere precedente. :: ? -> zero ou uma vez o caractere precedente. : Leia mais sobre regex em: http://www.ppgia.pucpr.br/~laureano/puc_2003/lsu/perl-regexp.html : Alguns exemplos de programas e códigos: for my $name('Joao', 'Maria', 'Jose'){ say "Hello $name, how are you?"; } :: Neste exemplo temos simplesmente a implressão em tela da frase entre aspas diversas vezes com a alteração do nome contido na variável $name. Isso é chamado de interpolação de variáveis, como explicado anteriormente. :: Aqui temos um exemplo de como seria um quicksort em Perl: sub quicksort{ my @lista = @_; my (@menores, @iguais, @maiores); return @lista if @lista < 2; foreach (@lista){ if($_ lista0){ push @menores, $_; }elsif($_ lista0){ push@iguais, $_; }else{ push @maiores, $_; } } return quicksort(@menores), @iguais,quicksort(@maiores); } Domínios de aplicação : Atualmente, Perl não está em um de seus melhores momentos na história. Apesar de ter sido amplamente utilizada e ser melhor que diversas outras linguagens em diversas aplicações, a linguagem vem perdendo espaço para outras linguagens, como python e java. Suas principais aplicações são em sistemas críticos; em desenvolvimento web dinâmico; na manipulação de textos; dministração de sistemas; projetos com uso de metodologia ágil; transações de comércio eletrônico; e códigos para uso pessoal. Mas seu principal e mais importante uso ainda é no desenvolvimento Unix. Avaliação da linguagem Legibilidade: : A linguagem Perl tem baixa legibilidade, sendo esse fato muito influenciado pela sua capacidade de escrita, deixando os códigos complexos e pouco legíveis. A linguagem possui muitos componentes básicos, não possui declarações de tipos de variáveis e implementações de códigos únicas, ocasionando em diversas soluções para uma mesma aplicação. Permite também variáveis de mesmo nome e declaradas no meio do código. Esses fatores influenciam para que a linguagem apresente uma baixa legibilidade. Capacidade de escrita: : Perl é uma linguagem com alta capacidade de escrito, oferecendo suporte a programação estruturada, orientada a objeto e funcional. Tem diversos frameworks para implementação de códigos para web, e é excelente para manipulação de textos e arquivos. Utiliza de comandos para expressões regulares, e implementações de soluções únicas, ocasionando em diferentes tipos de soluções para um mesmo problema. Custo: : Perl é uma linguagem com custo moderado, onde o fator que oferece mais influência é o custo de manutenção. Seu custo de treinamento é variado, dependendo do objetivo da contratação do funcionário, podendo ter custo baixo, pois Perl tem sintaxe simples e de rápida aprendizagem, ou mais elevado, pois Perl tem diversas aplicações que podem exigir mais do programador. Confiabilidade: : Perl é uma linguagem relativamente bem confiável.Tem checagem dinâmica de tipos, diminuindo um pouco sua confiabilidade, já que erros de tipo somente serão encontrados durante a execução do programa, em contrapartida possui tratamento de excessões. Outros: : Segurança: '''Embora Perl possua recursos que focam a segurança, como taint mode, no qual cria-se um tratamento especial para variavel a qual o usuario tem acesso, a permissividadem de Perl quanto a maneira de progrmar deixa nas mãos do programador a responsabilidade de boa implementação vizando a segurança. Exemplos disso é a função setuid(). Esta função faz com que seja ativada o usuario root no sistema, independente se o código que a chamou tinha essa permição ou não. Outra possivel brecha em Perl está no tratamento de input de usuario. Sem uma boa validação dos inputs do usuario, este é capaz de inserir meta caracteres e expreções no conteudo de suas submições de forma que quando o scrypt processar seu conteudo haverá efeitos colaterais. : '''Eficiência: '''Perl tem uma eficiência relativamente boa, pois é uma linguagem interpretada e compilada, ococrrendo em uma pequena perda de eficiência na execução, mas com ganho em velocidade de compilação. : '''Flexibilidade: Pel é uma liguagem muit flexível, onde existem diversas soluções para um mesmo problema, além de seu suporte a programações estruturadas, orientada a objeto e funcional. : Portabilidade: Perl é uma linguagem com muita portabilidade, sendo disponível para inúmeros sistemas operacionais. Referências #DEITEL, Harvey M., Perl: como programar. Porto Alegre, 2002. #FOGHLU, Michael O. Perl 5: Guia de referência rápida. Rio de Janeiro: Campus, 1997. #COZES, Simons. Beggining Perl, disponível em: http://learn.perl.org/books/begginning-perl/ #http://br.perlmaven.com/ #http://absoluta.org #http://perldoc.perl.org/ #http://ppgia.pucpr.br/